// HostMatrix.h
#pragma once
#include <memory>
#include <vector>

class XMatrix {
private:
  int width;
  int height;
  std::shared_ptr<float[]> elements; // 使用智能指针管理内存
  float *get_raw() { return elements.get(); }

public:
  XMatrix() : width(0), height(0), elements(nullptr){};
  // 构造函数
  XMatrix(int height, int width);

  // 拷贝构造
  XMatrix(const XMatrix &) = default;
  // 赋值运算
  XMatrix &operator=(const XMatrix &) = default;

  // 析构函数
  ~XMatrix() = default;

  // 获取矩阵宽度
  int getWidth() const;

  // 获取矩阵高度
  int getHeight() const;

  // 将外部数组填充到矩阵
  void fill_array(float array[], bool transpose = false);
  void fill_array(std::vector<float> &array, bool transpose = false);
  void fill_array(std::vector<std::vector<float>> &array,
                  bool transpose = false);

  // 填充为递增序列
  void fill_range();
  // 填充为1
  void fill_one();
  // 填充为0
  void fill_zero();

  // 打印矩阵内容
  void print() const;

  // 矩阵乘法接口
  friend XMatrix operator*(XMatrix &hostA, XMatrix &hostB);
};